const config_module = require("./config");
const Redis = require("ioredis");

// 创建 redis 客户端实例
const RedisCli = new Redis({
  // host: config_module.redis_host, // redis服务器主机名
  // port: config_module.redis_port, // redis服务器端口号
  // passwd: config_module.redis_passwd, // redis密码
  host: "127.0.0.1", // redis服务器主机名
  port: 6380, // redis服务器端口号
  password: "foobared", // redis密码foobared

  enableOfflineQueue: false, // 禁用离线队列
  enableReadyCheck: true, // 启用连接就绪检查
});

//  监听错误
RedisCli.on("error", function (err) {
  // console.log(
  //   config_module.redis_host +
  //     " " +
  //     config_module.redis_port +
  //     " " +
  //     config_module.redis_passwd
  // );
  console.log("RedisCli connection error: ", err);
  RedisCli.connect();
});

// 根据key获取value
async function GetRedis(key) {
  try {
    console.log("---------" + key);
    const result = await RedisCli.get(key);
    if (result === null) {
      console.log("result:", "<" + result + ">", "This key cannot be find...");
      return null;
    }
    console.log("Result:", "<" + result + ">", "Get key success!...");
    return result;
  } catch (error) {
    console.log("GetRedis error is", error);
    return null;
  }
}

// 根据key获取value
async function QueryRedis(key) {
  try {
    const result = await RedisCli.exists(key);
    // 判断该值是否为空
    if (result === 0) {
      console.log("result:<", "<" + result + ">", "This key is null ...");
      return null;
    }
    console.log("Result:", "<" + result + ">", "with this value! ...");
    return result;
  } catch (error) {
    console.log("QueryRedis error is", error);
    return null;
  }
}

// 设置key和value，并设置过期的时间
async function SetRedisExpire(key, value, exptime) {
  try {
    // 设置key和value
    await RedisCli.set(key, value);
    // 设置过期事件
    await RedisCli.expire(key, exptime);
    // nodejs获取redis时间的代码（cmd中可以使用time命令）
    RedisCli.time(function (err, result) {
      if (err) throw err;

      console.log(`UNIX 时间戳：${result[0]}`);
      console.log(`微秒数：${result[1]}`);
    });
    console.log(
      key + " : " + value + " ;SetRedisExpire success, exptime = " + exptime
    );
    return true;
  } catch (error) {
    console.log(key + " : " + value + " ;SetRedisExpire error is", error);
    return false;
  }
}

// 退出函数
function Quit() {
  RedisCli.quit();
}

module.exports = { GetRedis, QueryRedis, Quit, SetRedisExpire };
